import { useMutation } from '@tanstack/react-query';
import { useForm } from 'react-hook-form';
import { useNavigate } from 'react-router-dom';

import { AuthService } from '../services/auth.service.ts';
import useAuthStore from '../zustand/stores/useAuthStore.ts';

export interface IAuthForm {
  login: string;
  password: string;
}

/**
 * Этот хук содержит всю логику, связанную с
 * формой авторизации.
 */
export const useLoginForm = () => {
  // Используем react-hook-form для управления формой
  const { register, handleSubmit, reset, ...restForm } = useForm<IAuthForm>({
    mode: 'onChange',
  });

  const { setToken } = useAuthStore();
  const navigate = useNavigate();

  // Используем здесь мутацию, так как это действие,
  // которое запускается в ручную.
  const { mutate, isPending, error } = useMutation({
    mutationKey: ['form', 'login'],
    mutationFn: (data: IAuthForm) => AuthService.login(data),
    onSuccess(data) {
      const { user_token } = data.data.data;

      // Авторизуем пользователя только в том случае,
      // если токен пришел.
      if (user_token) {
        setToken(user_token);
        navigate('/');
      }
    },
  });

  return {
    register,
    handleSubmit,
    reset,
    mutate,
    isPending,
    error,
    ...restForm,
  };
};
